//////////////////////////////////////////////////////////////////////////

#ifndef _GRAPHICSIMPL_H_
#define _GRAPHICSIMPL_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _GRAPHICS_H_
#include "graphics.h"
#endif

//////////////////////////////////////////////////////////////////////////



/** Game graphics implementation [SDL]
*
*  @author   Pasechnik Roman
*  @author   Anastasia Karpinska
*  @since    Nov 12th, 2009
*  @updated  May 08th, 2010
*/
class GraphicsImpl
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Constructor */
    GraphicsImpl();


    /** Destructor */
    virtual ~GraphicsImpl();


//////////////////////////////////////////////////////////////////////////


    /** Load object */
    virtual Graphics::Object LoadObject( const std::string& _fileName );


    /** Draw object
     *
     *  @param  _surface - Set surface for drawing, draws on screen surface when NULL
     */
    virtual void DrawObject( Graphics::Object _object, size_t _x, size_t _y, bool _center = false, Graphics::Object _surface = NULL );


    /** Draw string in the left upper corner */
    void DrawString( const char* _str );


    /** Clears screen */
    void ClearScreen();


    /** Update screen */
    void Update();


//////////////////////////////////////////////////////////////////////////

private:

//////////////////////////////////////////////////////////////////////////


    /** Screen surface */
    Graphics::Object m_Screen;


    /** Font */
    Graphics::Object m_Font;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
